#include "systick.h"

static volatile uint64_t g_sysRunTime = 0;

static void (*g_pTaskScheduleFunc)(void);    // 函数指针变量，保存任务调度的函数地址

/**
 * @brief 注册任务调度回调函数
 * @param pFunc, 传入回调函数地址
 * @return
 */
void TaskScheduleCbReg(void (*pFunc)(void))
{
    g_pTaskScheduleFunc = pFunc;
}

/**
 * @brief systick初始化
 * @param
 * @return
 */
void SystickInit(void)
{
    /*1ms 产生一次定时中断*/
    RCC_SYSCLKSRC_Config(RCC_SYSCLKSRC_HSI);
    InitTick(48000000);
}

/**
 * @brief 定时器中断服务函数，1ms产生一次中断
 * @param
 * @return
 */
void SysTick_Handler(void)
{
    uwTick += uwTickFreq;
    g_sysRunTime++;
    if (g_pTaskScheduleFunc == NULL)
    {
        return;
    }
    g_pTaskScheduleFunc();
}

/**
 * @brief 获取系统运行时间
 * @param
 * @return 以1ms为单位
 */
uint64_t GetSysRunTime(void)
{
    return g_sysRunTime;
}
